package com.gitee.qdbp.general.system.api.permission.basic;

import java.util.List;
import com.gitee.qdbp.able.exception.ServiceException;
import com.gitee.qdbp.able.jdbc.ordering.OrderPaging;
import com.gitee.qdbp.able.jdbc.paging.PageList;
import com.gitee.qdbp.general.system.api.permission.model.ResourceCoreBean;
import com.gitee.qdbp.general.system.api.permission.model.ResourceCoreUpdate;
import com.gitee.qdbp.general.system.api.permission.model.ResourceCoreWhere;

public interface IResourceCoreBasic {

    /**
     * 资源信息查询
     *
     * @param where 查询条件
     * @return 资源信息
     * @throws ServiceException 查询失败
     */
    ResourceCoreBean find(ResourceCoreWhere where) throws ServiceException;

    /**
     * 根据资源ID查询资源信息
     *
     * @param id 资源ID
     * @return 资源信息
     * @throws ServiceException 查询失败
     */
    ResourceCoreBean findById(String id) throws ServiceException;

    /**
     * 根据资源KEY查询资源信息
     *
     * @param key 资源KEY
     * @return 资源信息
     * @throws ServiceException 查询失败
     */
    ResourceCoreBean findByKey(String key) throws ServiceException;

    /**
     * 资源信息查询
     *
     * @param paging 排序分页条件
     * @return 资源信息列表
     * @throws ServiceException 查询失败
     */
    PageList<ResourceCoreBean> list(OrderPaging paging) throws ServiceException;

    /**
     * 资源信息查询
     *
     * @param where 查询条件
     * @param paging 排序分页条件
     * @return 资源信息列表
     * @throws ServiceException 查询失败
     */
    PageList<ResourceCoreBean> list(ResourceCoreWhere where, OrderPaging paging) throws ServiceException;

    /**
     * 根据资源ID查询资源信息列表
     *
     * @param ids 资源ID列表
     * @return 资源信息列表
     * @throws ServiceException 查询失败
     */
    PageList<ResourceCoreBean> listByIds(List<String> ids) throws ServiceException;

    /**
     * 根据资源KEY查询资源信息列表
     *
     * @param keys 资源KEY列表
     * @return 资源信息列表
     * @throws ServiceException 查询失败
     */
    PageList<ResourceCoreBean> listByKeys(List<String> keys) throws ServiceException;

    /**
     * 根据用户ID查询资源信息列表
     *
     * @userId 用户ID
     * @param paging 排序分页条件
     * @return 资源信息列表
     * @throws ServiceException 查询失败
     */
    PageList<ResourceCoreBean> listByUserId(String userId, OrderPaging paging) throws ServiceException;

    /**
     * 根据用户ID查询资源信息列表
     *
     * @userId 用户ID
     * @param where 查询条件
     * @param paging 排序分页条件
     * @return 资源信息列表
     * @throws ServiceException 查询失败
     */
    PageList<ResourceCoreBean> listByUserId(String userId, ResourceCoreWhere where, OrderPaging paging) throws ServiceException;

    /**
     * 创建资源信息
     *
     * @param model 待新增的资源信息
     * @return 受影响行数
     * @throws ServiceException 创建失败
     */
    int create(ResourceCoreBean model) throws ServiceException;

    /**
     * 批量创建资源信息
     *
     * @param models 待新增的资源信息
     * @return 受影响行数
     * @throws ServiceException 创建失败
     */
    int create(List<ResourceCoreBean> models) throws ServiceException;

    /**
     * 修改资源信息
     *
     * @param model 待修改的内容
     * @param errorOnUnaffected 受影响行数为0时是否抛异常
     * @return 受影响行数
     * @throws ServiceException 修改失败
     */
    int update(ResourceCoreUpdate model, boolean errorOnUnaffected) throws ServiceException;

    /**
     * 根据资源ID删除资源信息
     *
     * @param ids 待删除的资源信息的资源ID
     * @param errorOnRowsNotMatch 删除行数不匹配时是否抛异常
     * @return 删除行数
     * @throws ServiceException 删除失败
     */
    int deleteByIds(List<String> ids, boolean errorOnRowsNotMatch) throws ServiceException;

    /**
     * 根据资源KEY删除资源信息
     *
     * @param keys 待删除的资源KEY
     * @param errorOnRowsNotMatch 删除行数不匹配时是否抛异常
     * @return 删除行数
     * @throws ServiceException 删除失败
     */
    int deleteByKeys(List<String> keys, boolean errorOnRowsNotMatch) throws ServiceException;

    /**
     * 根据条件删除资源信息
     *
     * @param where 条件
     * @param errorOnUnaffected 删除行数为0时是否抛异常
     * @return 删除行数
     * @throws ServiceException 删除失败
     */
    int delete(ResourceCoreWhere where, boolean errorOnUnaffected) throws ServiceException;

}
